package cn.ch.org.controller;

import cn.ch.org.domain.SystemDictionaryDetail;
import cn.ch.org.query.SystemDictionaryDetailQuery;
import cn.ch.org.service.ISystemDictionaryDetailService;
import cn.ch.utils.AjaxResult;
import cn.ch.utils.PageList;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 部门管理接口
 *  要求前后端传递参数必须使用json对象
 *  写接口的三要素：
 *    1.请求地址是什么
 *    2.请求参数是什么
 *    3.返回值是什么
 */

//@Controller标记这是一个controller，用于扫描
@RestController //这里使用resultful的方式来写，包含Controller和ResponseBody
@RequestMapping("/detail")//写一个便捷路径

public class SystemDictionaryDetailController {

    @Autowired//注入
    private ISystemDictionaryDetailService systemdictionarydetailService;
//单条数据的查询
    @GetMapping("/{id}")//查询数据用Get，并且要根据id查询，这里面的id可以改变 http://localhost:8080/dept/2
    public SystemDictionaryDetail queryId(@PathVariable("id") Long id){//使用@PathVariable来获取请求符中占有的值
        return systemdictionarydetailService.queryById(id);//调用单挑查询查询的方法
    }
//全部数据的查询
    @GetMapping//不需要传入id，直接写
    private List<SystemDictionaryDetail> queryAll(){
        return systemdictionarydetailService.queryAll();//调用查询全部的方法
    }
//删除方法
    @DeleteMapping("/{id}")//删除数据，要用DeleteMapping，并且要传入一个id
    public AjaxResult del(@PathVariable("id") Long id){//使用@PathVariable来获取请求符中占有的值
        //需要返回删除完成后的提示数据
        /*方法一：只不过这个方法比较low，以后不建议使用*/
        /*
        try {//抛个异常
            systemdictionarydetailService.remove(id);//调用删除的方法
            return new AjaxResult();//成功里返回一个AjaxResult对象
        } catch (Exception e) {//如果有异常
            e.printStackTrace();
            AjaxResult result = new AjaxResult();//也要创建一个AjaxResult对象
            result.setSuccess(false);//设置返回结果为false
            result.setMessage("删除出现故障，正在紧急联系程序员。。。");//设置错误的返回数据
            return result;//返回以上结果
        }
        */
        /*方法二：在方法里面返回一个对象，没有什么大的改变，一般也不推荐使用*/
        /*
        try {//抛个异常
            systemdictionarydetailService.remove(id);//调用删除的方法
            return AjaxResult.me();//成功里返回一个AjaxResult对象，这里调用了里面的方法
        } catch (Exception e) {//如果有异常
            e.printStackTrace();
            AjaxResult result = AjaxResult.me();//也要创建一个AjaxResult对象
            result.setSuccess(false);//设置返回结果为false
            result.setMessage("删除出现故障，正在紧急联系程序员。。。");//设置错误的返回数据
            return result;//返回以上结果
        }
        */
        /*方法三：在企业里面用的比较多，使用链式编程的方式，来返回删除的值*/
        try {//抛个异常
            systemdictionarydetailService.remove(id);//调用删除的方法
            return AjaxResult.me();//成功里返回一个AjaxResult对象，这里调用了里面的方法
        } catch (Exception e) {//如果有异常
            e.printStackTrace();
            return AjaxResult.me()
                    .setSuccess(false)
                    .setMessage("删除出现故障，正在紧急联系程序员。。。");//链式编程返回结果
        }
    }
//批量删除
    /**
     * 批量删除
     *  前端传递的是数组，后面可以使用List 或者数组接收
     *
     * @param ids
     * @return
     */

    @PatchMapping
    public AjaxResult batch(@RequestBody List<Long> ids){
        try {
            systemdictionarydetailService.batch(ids);
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me()
                    .setSuccess(false)
                    .setMessage("噢哟，系统报错了，我们正在殴打程序员！！");
        }
    }


//分页查询数据
    @PostMapping//分页+高级查询使用 @PostMapping
    public PageList<SystemDictionaryDetail> pageList(@RequestBody SystemDictionaryDetailQuery query){//因为掺入的是一个对象，所有要用@RequestBody
        try {
            return systemdictionarydetailService.queryList(query);//调用分页查询的方法
        } catch (Exception e) {
            e.printStackTrace();
            return new PageList<>();
        }
    }
//新增和修改数据
    @PutMapping//添加和修改数据使用@PutMapping
    @ApiOperation(value = "新增或修改，如果传递ID=修改，否则新增" )
    public AjaxResult addOrUpdate(@RequestBody SystemDictionaryDetail systemdictionarydetail){
        try {
            if(systemdictionarydetail.getId() == null){
                systemdictionarydetailService.add(systemdictionarydetail);
            }else{
                systemdictionarydetailService.update(systemdictionarydetail);
            }
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(systemdictionarydetail.getId());
            return AjaxResult.me()
                    .setSuccess(false)
                    .setMessage("噢哟，系统报错了，我们正在殴打程序员！！");
        }
    }

}
